{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 408,
   "id": "7a94c445",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.integrate import quad, dblquad, tplquad, nquad\n",
    "import matplotlib.patches as mpatches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "id": "f4b80557",
   "metadata": {},
   "outputs": [],
   "source": [
    "LP_records={}\n",
    "CH_records={}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "3352bee0",
   "metadata": {},
   "outputs": [],
   "source": [
    "def Legender_Polynomials(x,n):\n",
    "    global LP_records\n",
    "    if n==0:\n",
    "        return 1\n",
    "    elif n==1:\n",
    "        return x\n",
    "    else:\n",
    "        if (x,n) in LP_records.keys():\n",
    "            return LP_records[(x,n)]\n",
    "        else:\n",
    "            ans=((2*n-1)*x*Legender_Polynomials(x,n-1)-(n-1)*Legender_Polynomials(x,n-2))/(n)\n",
    "            LP_records[(x,n)]=ans\n",
    "            return ans"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 500,
   "id": "d8da22f8",
   "metadata": {},
   "outputs": [],
   "source": [
    "def Chebyshev_Polynomials(x,n):\n",
    "        if n==0:\n",
    "            return 1\n",
    "        else:\n",
    "            return np.cos(n*x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "cc9e1e73",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "17"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Chebyshev_Polynomials(3,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 496,
   "id": "9af49be7",
   "metadata": {},
   "outputs": [],
   "source": [
    "F=lambda x: np.cos(2*np.exp(x)+2*x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 497,
   "id": "45be4afe",
   "metadata": {},
   "outputs": [],
   "source": [
    "F=lambda x: np.cos(2*np.exp(x)+2*x)\n",
    "x=np.arange(-1,1,0.02)\n",
    "y=F(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 498,
   "id": "488456dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 533,
   "id": "4b53679f",
   "metadata": {},
   "outputs": [],
   "source": [
    "order=6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 485,
   "id": "9054ed95",
   "metadata": {},
   "outputs": [],
   "source": [
    "A=np.zeros((order,order))\n",
    "for i in range(order):\n",
    "#     for j in range(order):\n",
    "    A[i,i]+=2/(2*i+1)#Legender_Polynomials(x_,i)*Legender_Polynomials(x_,i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 486,
   "id": "532fb1c8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        ],\n",
       "       [0.        , 0.66666667, 0.        , 0.        , 0.        ,\n",
       "        0.        ],\n",
       "       [0.        , 0.        , 0.4       , 0.        , 0.        ,\n",
       "        0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.28571429, 0.        ,\n",
       "        0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.22222222,\n",
       "        0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.18181818]])"
      ]
     },
     "execution_count": 486,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 534,
   "id": "6cf9fc97",
   "metadata": {},
   "outputs": [],
   "source": [
    "A=np.zeros((order,order))\n",
    "nx=np.arange(0,np.pi,np.pi/x.shape[0])\n",
    "for i in range(order):\n",
    "    for x_ in nx:\n",
    "        A[i,i]+=Chebyshev_Polynomials(x_,i)*Chebyshev_Polynomials(x_,i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 535,
   "id": "7fc6313f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[100.,   0.,   0.,   0.,   0.,   0.],\n",
       "       [  0.,  50.,   0.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,  50.,   0.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,  50.,   0.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,  50.,   0.],\n",
       "       [  0.,   0.,   0.,   0.,   0.,  50.]])"
      ]
     },
     "execution_count": 535,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 394,
   "id": "23b0da76",
   "metadata": {},
   "outputs": [],
   "source": [
    "B=np.zeros((order,1))\n",
    "for i in range(order):\n",
    "        B[i,0]+=quad(lambda dx:Legender_Polynomials(dx,i)*F(dx),-1,1)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 537,
   "id": "461b5519",
   "metadata": {},
   "outputs": [],
   "source": [
    "B=np.zeros((order,1))\n",
    "nx=np.arange(0,np.pi,np.pi/x.shape[0])\n",
    "for i in range(order):\n",
    "    for x_,y_ in zip(nx,y):\n",
    "        B[i,0]+=Chebyshev_Polynomials(x_,i)*y_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 538,
   "id": "b3baf744",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 23.82727315],\n",
       "       [ 17.81173572],\n",
       "       [ 31.71554134],\n",
       "       [-30.97684333],\n",
       "       [ -5.08065392],\n",
       "       [  3.18564338]])"
      ]
     },
     "execution_count": 538,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 539,
   "id": "768a9b39",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.23827273]\n",
      " [ 0.35623471]\n",
      " [ 0.63431083]\n",
      " [-0.61953687]\n",
      " [-0.10161308]\n",
      " [ 0.06371287]]\n"
     ]
    }
   ],
   "source": [
    "ai=np.linalg.inv(A)@B\n",
    "print(ai)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 549,
   "id": "f8d9f387",
   "metadata": {},
   "outputs": [],
   "source": [
    "predict_y=np.zeros_like(y)\n",
    "for j in range(order):\n",
    "    for i in range(x.shape[0]):\n",
    "        predict_y[i]+=Chebyshev_Polynomials(nx[i],j)*ai[j,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 550,
   "id": "9dfec79d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(nx,predict_y)\n",
    "plt.scatter(nx,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 542,
   "id": "226eb00b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.155477073660188"
      ]
     },
     "execution_count": 542,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.linalg.norm(y-predict_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 579,
   "id": "4d72ac18",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Orthogonal_Polynomials_Fitting:\n",
    "    def __init__(self,x,y):\n",
    "        assert x.shape[0]==y.shape[0] or len(x)==len(y)\n",
    "        self.x=x\n",
    "        self.y=y\n",
    "        self.N=self.x.shape[0]\n",
    "        self.LP_records={}\n",
    "        self.CH_records={}\n",
    "        self.low=np.min(x)\n",
    "        self.high=np.max(x)\n",
    "        self.shift=False\n",
    "        if self.low<-1 or self.high>1:\n",
    "            self.shift=True\n",
    "            self.shift_x=np.arange(-1,1,2./self.N)\n",
    "        \n",
    "    @classmethod\n",
    "    def Legender_Polynomials(self,x,n):\n",
    "        if n==0:\n",
    "            return 1\n",
    "        elif n==1:\n",
    "            return x\n",
    "        else:\n",
    "            if (x,n) in self.LP_records.keys():\n",
    "                return self.LP_records[(x,n)]\n",
    "            else:\n",
    "                ans=((2*n-1)*x*Legender_Polynomials(x,n-1)-(n-1)*Legender_Polynomials(x,n-2))/(n)\n",
    "                self.LP_records[(x,n)]=ans\n",
    "                return ans\n",
    "            \n",
    "    @classmethod\n",
    "    def Chebyshev_Polynomials(self,x,n):\n",
    "        if n==0:\n",
    "            return 1\n",
    "        else:\n",
    "            return np.cos(n*x)\n",
    "#         elif n==1:\n",
    "#             return x\n",
    "#         else:\n",
    "#             if (x,n) in self.CH_records.keys():\n",
    "#                 return self.CH_records[(x,n)]\n",
    "#             else:\n",
    "#                 ans=2*x*Chebyshev_Polynomials(x,n-1)-Chebyshev_Polynomials(x,n-2)\n",
    "#                 self.CH_records[(x,n)]=ans\n",
    "#                 return ans\n",
    "            \n",
    "    def calculate(self, order, method='Legender', show_error=True, show_fitting_result=True):\n",
    "        \n",
    "        cx=self.shift_x if self.shift else self.x\n",
    "        \n",
    "        if method == 'Legender':\n",
    "            Method=Legender_Polynomials\n",
    "        elif method == 'Chebyshev':\n",
    "            Method=Chebyshev_Polynomials\n",
    "            # with x=cosθ,we can let the weight function to be 1\n",
    "            cx=np.arange(0,np.pi,np.pi/cx.shape[0])\n",
    "        \n",
    "        \n",
    "        A=np.zeros((order,order))\n",
    "        for i in range(order):\n",
    "            for x_ in cx:\n",
    "                A[i,i]+=Method(x_,i)*Method(x_,i)\n",
    "\n",
    "        B=np.zeros((order,1))\n",
    "        for i in range(order):\n",
    "            for x_,y_ in zip(cx,self.y):\n",
    "                B[i,0]+=Method(x_,i)*y_\n",
    "\n",
    "        ai=np.linalg.inv(A)@B\n",
    "        predict_y=np.zeros_like(self.y)\n",
    "        for j in range(order):\n",
    "            for i in range(cx.shape[0]):\n",
    "#                 x_ = self.x[i] if not self.shift else 1/(self.high-self.low)*(2*self.x[i]-self.high-self.low)\n",
    "                predict_y[i]+=Method(cx[i],j)*ai[j,0]\n",
    "\n",
    "            \n",
    "        error=np.linalg.norm(y-predict_y)\n",
    "        \n",
    "        if show_error:\n",
    "            print(\"Fitting Error: {:.5f}\".format(error))\n",
    "            \n",
    "        if show_fitting_result:\n",
    "            plt.subplot(111)\n",
    "            plt.scatter(self.x,self.y,s=5, marker='*',c='green')\n",
    "            plt.scatter(self.x,predict_y,s=5, marker='o',c='red')\n",
    "            Raw=mpatches.Patch(color='green', label='Raw Points')\n",
    "            Predict=mpatches.Patch(color='red', label='Predict Points')\n",
    "            plt.title('Orthogonal-Polynomials by {} with {} orders'.format(method,order))\n",
    "            plt.legend(handles=[Raw,Predict],loc='best')\n",
    "            plt.show()\n",
    "        return predict_y,error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 558,
   "id": "b2ca0e0f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(50,)\n"
     ]
    }
   ],
   "source": [
    "F=lambda x: np.cos(2*np.exp(x))\n",
    "x=np.arange(1,2,0.02)\n",
    "y=F(x)\n",
    "print(x.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 553,
   "id": "38538655",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 580,
   "id": "b4514603",
   "metadata": {},
   "outputs": [],
   "source": [
    "OP=Orthogonal_Polynomials_Fitting(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 571,
   "id": "edf1102e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting Error: 1.02585\n"
     ]
    },
    {
     "data": {
      "image/png": "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bwaC7ncXXnghVVVVHHfccaxfv745rcMPP5ymG80eeeQRDjzwQAYNGsRRRx3F6tWrmT59OjfccAPV1dUsWrQoYZ66d+9Ov379ePPNN3niiScYPHgwAwYM4KyzzuLzzz/fZlldunThZz/7GYMGDWL48OGsW7eO2tpa5s2bx8SJE6muruaf//wnU6dOpaqqioEDBzJu3LhsbVKJpTFzJIM0WmYamoYvPvroo4FgPPylS5fSt29fZsyYwc4778zzzz/P559/zqGHHso3v/lNXnzxRV5//XVeeeUV1q1bR1VVFWedddZW6W7YsIFzzz2XhQsX0rdvXzZt2sQuu+zChAkT6NKlC5dddlnSfK1atYpVq1ZRWVnJwQcfzBNPPME+++zD6aefzk033cQll1yy1fwff/wxw4cP55prruHyyy9n5syZ/PznP2fMmDEcf/zxfOc73wGCYZbfeOMNtttuO95///2MbcdIymRDa4KROkXaSiX8dmgavnjo0KHsueeenH322QAMGzaMvn37AvDYY49x2223UV1dzcEHH8zGjRtZsWIFCxcu5JRTTqG8vJw99tiDI488cpv0n3nmGUaOHNmc1i677JJSvu666y6qq6s55ZRTuPnmm9mwYQN9+/Zln332AeCMM85g4cJtb4ru2LEjxx9/PABDhgxh9erVcdMfOHAgp556KnfccQcVFSorJNTehtYCfW6uRIfO2nZoqsNvaYcddmh+7e5MmzaN0aNHbzXPQw891Gofa3dvVz/sk08+md///vfN7+PlMZ4OHTo0L6+8vJz6+vq48z344IMsXLiQefPm8atf/Yply5Yp8MfTnu6arTw3VyQTdERlyejRo7npppuaH4Lyj3/8g48//piRI0cyd+5cGhoaWLNmDfPnz9/mu4cccghPPvkkb7zxBgCbNm0Cth3muDX77bcfq1evZuXKlQDcfvvtHHbYYSl/P3Z5jY2NvP322xxxxBFMmTKF999/n48++ijltEpKaw2t8Ury6o0jOVD8AT/TdZsZSu+cc86hqqqKAw88kP79+3P++edTX1/Pt7/9bfbee28GDBjABRdcEDcAd+vWjRkzZjB27FgGDRrEySefDMC3vvUt7r///lYbbZt06tSJP/3pT5x00kkMGDCAsrIyJkyYkPI6jBs3juuuu47BgwezYsUKTjvtNAYMGMDgwYO59NJL6dq1a8pplZRkDa2JqnvUG0dyIK3hkbNNwyMXF+2bFKxbFwT7+voguNfVfVnI0B21kgHZHB5ZRNoiWUleT7CSLFOLm0guNVX3qCQveVCUJfxCroYqVdonbaCSvORJ0QX8Tp06sXHjRgWYAuLubNy4kU6dOuU7KyKSRNFV6VRWVlJXV4cejlJYOnXqRGVlZb6zISJJFF3A79ChQ/MdqCIikrqiq9IREZH2UcAXESkRCvgiIiWioO+0NbMNwJvt/PpuwHsZzE6x0HqXFq13aUllvb/q7t3iTSjogJ8OM1uc6PbiKNN6lxatd2lJd71VpSMiUiIU8EVESkSUA/6MfGcgT7TepUXrXVrSWu/I1uGLiMjWolzCFxGRGAr4IiIloqgDvpn90czWm9nSBNPNzKaa2Uoze9nMDsx1HrMhhfU+NVzfl82s1swG5TqP2dDaesfMd5CZNZjZd3KVt2xKZb3N7HAzW2Jmy8zsyVzmL1tSOM53NrM/m9lL4Xp/L9d5zAYz621m881sebheF8eZp12xragDPjALODrJ9GOAvcO/84CbcpCnXJhF8vV+AzjM3QcCvyI6DVyzSL7emFk58B/Ao7nIUI7MIsl6m1lX4A/AGHc/ADgpN9nKulkk398/AF5190HA4cB/mlnHHOQr2+qBH7v7/sBw4AdmVtVinnbFtqIO+O6+ENiUZJYTgNs88AzQ1cx2z03usqe19Xb3Wnf/V/j2GSAS4xansL8BfgjcC6zPfo5yI4X1Hg/c5+5vhfNHYt1TWG8HdjQzA7qE89bnIm/Z5O5r3P3v4esPgeVArxaztSu2FXXAT0Ev4O2Y93Vsu+Gi7mzg4XxnIhfMrBfwbWB6vvOSY/sAXzGzBWb2gpmdnu8M5cjvgf2Bd4FXgIvdvTG/WcosM+sDDAaebTGpXbGt6MbDb6N4z5ArmX6oZnYEQcD/er7zkiO/A37i7g1WWo8PrACGAEcBnYG/mdkz7v6P/GYr60YDS4AjgX7A42a2yN0/yGuuMsTMuhBcrV4SZ53aFduiHvDrgN4x7ysJSgORZ2YDgVuAY9x9Y77zkyNDgblhsN8NONbM6t39gbzmKvvqgPfc/WPgYzNbCAwCoh7wvwdc68HNRCvN7A1gP+C5/GYrfWbWgSDY3+nu98WZpV2xLepVOvOA08MW7eHAZndfk+9MZZuZ7QncB3y3BEp5zdy9r7v3cfc+wD3A90sg2AP8L1BjZhVmtj1wMEG9b9S9RXBVg5n1APYFVuU1RxkQtkn8N7Dc3X+bYLZ2xbaiLuGb2RyC1vndzKwOuAroAODu04GHgGOBlcAnBCWCopfCel8J7Ar8ISzt1kdhZMEU1juSWltvd19uZo8ALwONwC3unrTrajFIYX//CphlZq8QVHH8xN2jMGTyocB3gVfMbEn42RXAnpBebNPQCiIiJSLqVToiIhJSwBcRKREK+CIiJUIBX0SkRCjgi4iUCAV8EZESoYAvIlIi/j8xrSbizJZawAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "py=OP.calculate(6,method='Chebyshev')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 587,
   "id": "a6c08a09",
   "metadata": {},
   "outputs": [],
   "source": [
    "LG_Error_with_order=[]\n",
    "CH_Error_with_order=[]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 588,
   "id": "9727d02d",
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(1,11):\n",
    "    py,error=OP.calculate(i,method='Legender',show_error=False,show_fitting_result=False)\n",
    "    LG_Error_with_order.append(error)\n",
    "    py,error=OP.calculate(i,method='Chebyshev',show_error=False,show_fitting_result=False)\n",
    "    CH_Error_with_order.append(error)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 586,
   "id": "ac291089",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 586,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(LG_Error_with_order)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 592,
   "id": "87dbe3ac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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i8mTJ7No0aIc0wYOHMhzzz3n0PV8//33PPXUUzmm1atXj6VLlzp0PSVBqkTyM3Ei+uWXafAfRduOg4jtHysjsAm7SJWIKIxUiTjaqFEopZhztjPzd85n1jb7G02EEMIZJGHnJygIevSgw+q9dK97C+O/Hc/u07vNjkoIUYZJwi5ITAwqMZH55aOp6FORexbfw+U0x/dbFUIIe0jCLkjPnlCnDtXmLmZuv7nsPLWTx75/zOyohLupWROUctytZk2zt0iYRBJ2Qby84L77YOVKbvduzIQOE/jwzw9ZvKtoHfRFGXfSseNh27O8EydOMHjwYEJDQ2natCk9e/Zk3759NG/ePMd8EydOZOrUqfkuZ8SIEdSrVy97POwOHTpcc/jXavPmzTz88MMArF27ll9++SX7tREjRhT5BJqiKol15EcSdmHuu8+4/+QTJkVOol2ddoxePppD/x4q+H1CmERrTb9+/ejatSt///03u3bt4tVXX+VkMX84pkyZkj34k3VyzJJ7vI6Cxu8ozny5tWnThunTpwN5E7ajZWRkFD5TIYq7nbZIwi6MpfGRmTPx1or5dxsDvQz5cghpGWkmBydEXmvWrMHb25sHHngge1pERAR16zruAh8TJ04kJiaG7t27c++99+Z5fuTIEW699VbCw8O59dZbiY+PB4zS6WOPPcYtt9ySp290lrCwMM6dO4fWmurVq/PZZ58BMGzYMFavXs3atWvp3bs3hw8f5sMPP2TatGlERERkj12yfv16OnToQP369QssCWutefLJJ2nevDlhYWHZoxauXbuWW265haFDhxIWFobWmvHjx9O0aVN69erFqVOnspfx559/0qVLF1q3bs3tt99OYmIiYFyV5tlnn6VLly68/fbb177DrYN29K1169a6VFm2TGsw7rXWX+z8QjMR/dQPT5kcmHBFu3btyjkBHH8rwNtvv60feeSRPNMPHTqkfX19dYsWLbJvNWrU0FOmTMl3WcOHD9chISHZ8w8dOlRrrfWLL76oW7VqpZOTk20+7927t549e7bWWuuZM2fqvn37Zi+vV69eOj09Pd91jhkzRq9YsULv2LFDt2nTRo8ePVprrfUNN9ygk5KS9Jo1a3SvXr2y12sd//Dhw/WAAQN0RkaGjouL06GhofmuZ/Hixfq2227T6enp+sSJE7pu3br6+PHjes2aNdrPz08f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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(111)\n",
    "plt.plot(np.arange(0,10,1),LG_Error_with_order, marker='*',c='green')\n",
    "plt.plot(np.arange(0,10,1),CH_Error_with_order,marker='o',c='red')\n",
    "LG_Error=mpatches.Patch(color='green', label='LG_Error_with_order')\n",
    "CH_Error=mpatches.Patch(color='red', label='CH_Error_with_order')\n",
    "plt.title('Errors with different Orthogonal-Polynomials and Orders')\n",
    "plt.legend(handles=[LG_Error,CH_Error],loc='best')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a29c0727",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
